package string;

public class BigestCommonSubString {

    // 查找两个字符串的最大相同子串，最大交集
   public static void main(String[] args) {

       String str1 = "asdfdfdfdfdfdfdfdfdfasf34lk343434343433333fdasfd";
       String str2 = "asdfdfdfdfdfdfdfdfdf3434343434343jfshasdazlzlasbfasfdllzlz";
       String targetString = getSubString(str1, str2);
       System.out.println(targetString);
   }
    // 获得最大相同子串，这个方法可以被外部调用
   public static String getSubString(String str1, String str2) {
       String targetString = null;
       // 取出其中较短的字符串(照顾效率)
       String shorter = str1.length() > str2.length() ? str2 : str1;
       String longer = shorter.equals(str1) ? str2 : str1;
       // 在较短的字符串中抽取其‘所有长度’的子串，顺序由长到短
       out:
       for(int subLength = shorter.length(); subLength > 0; subLength--){
           // 子串的起始角标由 0 开始右移，直至子串尾部与母串的尾部-重合为止
           for(int i = 0; i+subLength <= shorter.length(); i++){
               String subString = shorter.substring(i, i+subLength); // 取子串
               if(longer.indexOf(subString) >= 0){ // 注意 ‘=’
                   targetString = subString;
                   break out;  // 一旦满足条件，则最大子串即找到，停止循环，
               }
           }
       }
       return targetString;
    }
}